﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Espam.Idiomas.Decimo.Tesis.Negocio;
using System.Drawing;
using Microsoft.Reporting.WebForms;
using System.Web.Services;
using System.IO;

namespace Espam.Idiomas.Decimo.Tesis.Web
{
    public partial class UI_AlternativeRegister : System.Web.UI.Page
    {
        string validaSession = "";
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {

                Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache);
                Response.Cache.SetAllowResponseInBrowserHistory(false);
                Response.Cache.SetNoStore();

                if (Session["userEspamIdiomasVarSession001"] == null || Session["rolEspamIdiomasVarSession003"] == null)
                {
                    validaSession = "NoHaIniciadoSession";
                    Response.Redirect("UI_Login.aspx?validaSession=" + validaSession);
                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Docente")
                {
                    Response.Redirect("UI_DashboardTeacher.aspx");
                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Administradores")
                {
                    Response.Redirect("Default.aspx");
                }
                else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Alumno")
                {
                    //btnMatricularme.Attributes.Add("onclick", " this.disabled = true,this.value='Procesando...'; " + ClientScript.GetPostBackEventReference(btnMatricularme, null) + ";");
                    //ConsultaMatricula();
                    //lblvalida.Visible = false;
                    //ddlNivel.AutoPostBack = true;
                    //lblvalida.Visible = false;
                    Response.Redirect("UI_DashboardStudents.aspx");
                }
            }
        }

        private void CargarddlNivel()
        {
            Modulos oModulo = new Modulos();
            List<Modulos> lista = new List<Modulos>();
            oModulo.fechaInicio = DateTime.Parse(DateTime.Today.ToShortDateString());
            oModulo.fechaFin = DateTime.Parse(DateTime.Today.ToShortDateString());
            oModulo.horaInicio = DateTime.Now.ToShortTimeString();
            oModulo.horaFin = DateTime.Now.ToShortTimeString();
            lista = oModulo.GetListaNivelesDisponibles();
            lista.Insert(0, new Modulos() { nivel = 0, descripcionNivel = "<seleccione un nivel>" });
            if (lista.Count>1)
            {
                ddlNivel.DataSource = lista;
                ddlNivel.DataTextField = "descripcionNivel";
                ddlNivel.DataValueField = "nivel";
                ddlNivel.DataBind();
            }
            else
            {

            }
        }

        protected void ddlNivel_SelectedIndexChanged(object sender, EventArgs e)
        {
            List<Modulos> lista = new List<Modulos>();
            Modulos oModulos = new Modulos();
            oModulos.nivel = int.Parse(ddlNivel.SelectedValue);
            oModulos.fechaInicio = DateTime.Parse(DateTime.Today.ToShortDateString());
            oModulos.fechaFin = DateTime.Parse(DateTime.Today.ToShortDateString());
            oModulos.horaInicio = DateTime.Now.ToShortTimeString();
            oModulos.horaFin = DateTime.Now.ToShortTimeString();
            lista = oModulos.comprueba();
            if (lista.Count > 0)
            {
                lista.Insert(0, new Modulos() { idModulo = 0, horario = "<seleccione un horario>" });
                ddlHorarioNivel.DataSource = lista;
                ddlHorarioNivel.DataTextField = "horario";
                ddlHorarioNivel.DataValueField = "idModulo";
                ddlHorarioNivel.DataBind();
                fila2Matricula.Visible = true;
            }
            else
            {
                //ocultaFormulario();
                //lblMensajeErrorMatricula.Text = "Ningún Módulo Disponible";
                fila2Matricula.Visible = false;
                lista.Insert(0, new Modulos() { idModulo = 0, horario = "<sin cupos en este módulo>" });

                ddlHorarioNivel.DataSource = lista;
                ddlHorarioNivel.DataTextField = "horario";
                ddlHorarioNivel.DataValueField = "idModulo";
                ddlHorarioNivel.DataBind();
            }
            lblvalida.Visible = false;
        }
        private void ConsultaMatricula()
        {
            Validaciones oValida = new Validaciones();
            List<Modulos> lista = new List<Modulos>();
            Modulos oModulos = new Modulos();
            oModulos.idAlumno = (int)Session["idAlumnoEspamIdiomasVarSession005"];
            oModulos.fechaInicio = DateTime.Parse(DateTime.Today.ToShortDateString());
            oModulos.fechaFin = DateTime.Parse(DateTime.Today.ToShortDateString());
            oModulos.horaInicio = DateTime.Now.ToShortTimeString();
            oModulos.horaFin = DateTime.Now.ToShortTimeString();
            lista = oModulos.GetListaNivelesDisponibles();
            if (lista.Count>0)
            {
                if (lista[0].estadoModuloMatricula == "Matriculado")
                {
                    lblMensajeErrorMatricula.Text = "MATRICULADO";
                    ocultaFormulario();
                    tablaMatriculado.Visible = true;
                    lblNumeroMatricula.Text = lista[0].numeroMatricula;
                    lblNivelMatriculado.Text = lista[0].descripcionNivel;
                    lblHorarioMatriculado.Text = lista[0].horario;
                    lblFechaInicioModulo.Text = lista[0].fechaInicio.ToShortDateString();
                    lblFechaFinModulo.Text = lista[0].fechaFin.ToShortDateString();
                    lblUbicacion.Text = lista[0].ubicacion;
                    imgPortadaLibro.ImageUrl = "img/LibrosInglesModulos/" + lista[0].patchLibro;
                    lblLibro.Text = "Libro " + lista[0].libro + " Unidades " + lista[0].unidades;
                    lista.Clear();
                }
                else
                {

                    if (lista.Count > 0)
                    {
                        lista.Insert(0, new Modulos() { nivel = 0, descripcionNivel = "<seleccione un nivel>" });
                        ddlNivel.DataSource = lista;
                        ddlNivel.DataTextField = "descripcionNivel";
                        ddlNivel.DataValueField = "nivel";
                        ddlNivel.DataBind();
                    }
                    else
                    {
                        ocultaFormulario();
                        lblMensajeErrorMatricula.Text = "Ningún Módulo Disponible";
                    }
                }
            }
            else
            {
                lblMensajeErrorMatricula.Text = "Ningún Módulo Disponible";
                ocultaFormulario();
            }
          
        }
        private void ocultaFormulario()
        {
            filaMatricula.Visible = false;
            fila2Matricula.Visible = false;
            idMensajeMatricula.Visible = true;
        }

        protected void btnMatricularme_Click(object sender, EventArgs e)
        {
            string mensaje = "";
            if (this.IsValid)
            {
                if (btnMatricularme.Text == "Matricularme")
                {
                    Matriculas oMatricular = new Matriculas();
                    oMatricular.idAlumno = (int)Session["idAlumnoEspamIdiomasVarSession005"];
                    oMatricular.idModulo = int.Parse(ddlHorarioNivel.SelectedValue);
                    oMatricular.fecha = DateTime.Parse(DateTime.Now.ToShortDateString());
                    mensaje = oMatricular.MatricularAlumno();
                    if (mensaje == "MATRICULADO CORRECTAMENTE")
                    {
                        ocultaFormulario();
                        lblMensajeErrorMatricula.Text = "MATRICULADO";
                        tablaMatriculado.Visible = true;
                        ConsultaMatricula();
                    }
                    else
                    {
                        lblvalida.Text = mensaje;
                        lblvalida.ForeColor = Color.Red;
                        lblvalida.Visible = true;
                        ConsultaMatricula();
                    }
                }
            }
        }

        protected void btnImprimir_Click(object sender, EventArgs e)
        {
            try
            {
                //Create 
                ReportViewer viewer = new ReportViewer();
                viewer.LocalReport.ReportPath = Server.MapPath("Reports/Students/Comprobante_Matriculado.rdlc");
                List<ReportParameter> parametros = new List<ReportParameter>();
                parametros.Add(new ReportParameter("estudiante", Session["nameEspamIdiomasVarSession006"].ToString() + " " + Session["lastNameEspamIdiomasVarSession005"].ToString()));
                parametros.Add(new ReportParameter("nivel", lblNivelMatriculado.Text));
                parametros.Add(new ReportParameter("horario", lblHorarioMatriculado.Text));
                parametros.Add(new ReportParameter("fechaInicio", lblFechaInicioModulo.Text));
                parametros.Add(new ReportParameter("fechaFin", lblFechaFinModulo.Text));
                parametros.Add(new ReportParameter("ubicacion", lblUbicacion.Text));
                parametros.Add(new ReportParameter("material", lblLibro.Text));
                parametros.Add(new ReportParameter("numeroMatricula", lblNumeroMatricula.Text));
                parametros.Add(new ReportParameter("fecha", DateTime.Now.ToShortDateString()));
                string[] cadena = lblNumeroMatricula.Text.Split(new Char[] { '-' });
                string[] cadenaFecha = DateTime.Now.ToShortDateString().Split(new Char[] { '/' });
                string randon = Path.GetRandomFileName();
                string randon2 = Path.GetRandomFileName();
                string encritptado = "CID" + randon + "/%&" + cadenaFecha[0] + "" + cadenaFecha[1] + "" + cadenaFecha[2] + "" + randon2 + "/%&" + cadena[1] + "/%&";

                parametros.Add(new ReportParameter("encriptado", encritptado));
                viewer.LocalReport.SetParameters(parametros);
                
                //Export
                string mimeType;
                string encoding;
                string fileNameExtension;
                string[] streams;
                Warning[] warnings;
                byte[] pdfContent = viewer.LocalReport.Render("PDF", string.Empty, out mimeType, out encoding, out fileNameExtension, out streams, out warnings);
                //string outputPath = @"C:\Users\Ganchozo_\Desktop\PdfReport.pdf";
                //using (FileStream fs = new FileStream(outputPath, FileMode.Create))
                //{
                //    fs.Write(pdfBytes, 0, pdfBytes.Length);
                //    fs.Close();
                //}
                this.Response.Clear();
                this.Response.ContentType = "application/pdf";
                this.Response.AddHeader("Content-disposition", "attachment; filename=Comprobante_Matriculado.pdf");
                this.Response.BinaryWrite(pdfContent);
                //this.Response.End();  

            }
            catch (Exception)
            {

            }
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Response.Redirect("UI_AlternativeRegister.aspx");
        }

    }
}